""" Module d'extension pour les produits scalaire et matriciel """

__auteur__ = ""
__coequipiers__ = None
__date__ = ""

import numpy as np
cimport numpy as np

cdef extern from "cProduit.h":
    double pScalC(double *v1, double *v2, int n, int d)
    void   pMatC(double *m1, double *m2, int l1, int c1, int c2, double *m3)

def pScalX(np.ndarray[dtype=double, ndim=1] v1, np.ndarray[dtype=double, ndim=1] v2):
    """ Produit scalaire de v1 par v2. """

    # vérifier la compatibilité des vecteurs
    if v1.size != v2.size:
        raise ValueError("les vecteurs ne sont pas de la même taille!")
        
    # vérifier que les vecteur sont contigues en mémoire
    if not v1.flags["C_CONTIGUOUS"]:
        v1 = v1.copy(order='C')
    if not v2.flags["C_CONTIGUOUS"]:
        v2 = v2.copy(order='C')
        
    return pScalC(<double*>np.PyArray_DATA(v1), <double*>np.PyArray_DATA(v2), v1.size, 1)

